package br.com.senac.digipao.dao;

import br.com.senac.digipao.bean.Cliente;
import br.com.senac.digipao.bean.Usuario;
import br.com.senac.digipao.connection.ConexaoDB;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;

public class ClienteDao {

    static PreparedStatement ps;

    // a conexão com o banco de dados
    private final Connection conexao;

    public ClienteDao() throws SQLException {
        this.conexao = new ConexaoDB().getConexao();
    }

    public void adicionaCliente(Cliente cliente) throws SQLException {
        // prepara a conexão
        String sql = "insert into tb_cliente(idCliente, nome, endereco, bairro, cidade, estado, email, telefone) values(?,?,?,?,?,?,?,?)";

        try (PreparedStatement stmt = conexao.prepareStatement(sql)) {

            stmt.setInt(1, cliente.getIdCliente());
            stmt.setString(2, cliente.getNome());
            stmt.setString(3, cliente.getEndereco());
            stmt.setString(4, cliente.getBairro());
            stmt.setString(5, cliente.getCidade());
            stmt.setString(6, cliente.getEstado());
            stmt.setString(7, cliente.getEmail());
            stmt.setString(8, cliente.getTelefone());

            //Executa o código SQL
            stmt.execute();
            stmt.close();
        }
    }

    public void alteraCliente(Cliente cliente) throws SQLException {
        String sql = "update tb_cliente set nome = ? , endereco = ? , bairro = ? , cidade = ? , estado = ? , email = ? , telefone = ? where idCliente = ?   ";

        try (PreparedStatement stmt = this.conexao.prepareStatement(sql)) {
            stmt.setString(1, cliente.getNome());
            stmt.setString(2, cliente.getEndereco());
            stmt.setString(3, cliente.getBairro());
            stmt.setString(4, cliente.getCidade());
            stmt.setString(5, cliente.getEstado());
            stmt.setString(6, cliente.getEmail());
            stmt.setString(7, cliente.getTelefone());
            stmt.setInt(8, cliente.getIdCliente());

            //executar a query
            stmt.execute();
            stmt.close();
        }
    }
    
    
      public List<Cliente> listaClientesPorParametro(String parametro) throws SQLException {
        // prepara a conexão
        boolean duplicado = false;
        List<Cliente> listaCliente = new ArrayList<>();

        String sql = "select * from tb_cliente where nome LIKE '%" + parametro + "%'";

        PreparedStatement preparedStatement = conexao.prepareStatement(sql);
        ResultSet rs = preparedStatement.executeQuery(sql);

        while (rs.next()) {
            Cliente cliente = new Cliente();
            cliente.setIdCliente(rs.getInt("idCliente"));
            cliente.setNome(rs.getString("nome"));
            cliente.setEndereco(rs.getString("endereco"));
            cliente.setBairro(rs.getString("bairro"));
            cliente.setCidade(rs.getString("cidade"));
            cliente.setEstado(rs.getString("estado"));
            cliente.setEmail(rs.getString("email"));
            cliente.setTelefone(rs.getString("telefone"));
            listaCliente.add(cliente);
        }

        sql = "select * from tb_cliente where endereco LIKE '%" + parametro + "%'";

        preparedStatement = conexao.prepareStatement(sql);
        rs = preparedStatement.executeQuery(sql);

        while (rs.next()) {
            duplicado = false;
            for (int i = 0; i < listaCliente.size(); i++) {
                if (listaCliente.get(i).getIdCliente() == rs.getInt("idCliente")) {
                    duplicado = true;
                    break;
                }
            }
            if (!duplicado) {
                Cliente cliente = new Cliente();
                cliente.setIdCliente(rs.getInt("idCliente"));
                cliente.setNome(rs.getString("nome"));
                cliente.setEndereco(rs.getString("endereco"));
                cliente.setBairro(rs.getString("bairro"));
                cliente.setCidade(rs.getString("cidade"));
                cliente.setEstado(rs.getString("estado"));
                cliente.setEmail(rs.getString("email"));
                cliente.setTelefone(rs.getString("telefone"));
                listaCliente.add(cliente);
                duplicado = false;
            }
        }

        sql = "select * from tb_cliente where cidade LIKE '%" + parametro + "%'";

        preparedStatement = conexao.prepareStatement(sql);
        rs = preparedStatement.executeQuery(sql);

        while (rs.next()) {
            duplicado = false;
                for (int i = 0; i < listaCliente.size(); i++) {
                if (listaCliente.get(i).getIdCliente() == rs.getInt("idCliente")) {
                    duplicado = true;
                    break;
                }
            }
            if (!duplicado) {
                Cliente cliente = new Cliente();
                cliente.setIdCliente(rs.getInt("idCliente"));
                cliente.setNome(rs.getString("nome"));
                cliente.setEndereco(rs.getString("endereco"));
                cliente.setBairro(rs.getString("bairro"));
                cliente.setCidade(rs.getString("cidade"));
                cliente.setEstado(rs.getString("estado"));
                cliente.setEmail(rs.getString("email"));
                cliente.setTelefone(rs.getString("telefone"));
                listaCliente.add(cliente);
                duplicado = false;
            }
        }

        sql = "select * from tb_cliente where estado LIKE '%" + parametro + "%'";

        preparedStatement = conexao.prepareStatement(sql);
        rs = preparedStatement.executeQuery(sql);

        while (rs.next()) {
            duplicado = false;
                 for (int i = 0; i < listaCliente.size(); i++) {
                if (listaCliente.get(i).getIdCliente() == rs.getInt("idCliente")) {
                    duplicado = true;
                    break;
                }
            }
            if (!duplicado) {
                Cliente cliente = new Cliente();
                cliente.setIdCliente(rs.getInt("idCliente"));
                cliente.setNome(rs.getString("nome"));
                cliente.setEndereco(rs.getString("endereco"));
                cliente.setBairro(rs.getString("bairro"));
                cliente.setCidade(rs.getString("cidade"));
                cliente.setEstado(rs.getString("estado"));
                cliente.setEmail(rs.getString("email"));
                cliente.setTelefone(rs.getString("telefone"));
                listaCliente.add(cliente);
                duplicado = false;
            }
        }

        sql = "select * from tb_cliente where bairro LIKE '%" + parametro + "%'";

        preparedStatement = conexao.prepareStatement(sql);
        rs = preparedStatement.executeQuery(sql);

        while (rs.next()) {
             duplicado = false;
                  for (int i = 0; i < listaCliente.size(); i++) {
                if (listaCliente.get(i).getIdCliente() == rs.getInt("idCliente")) {
                    duplicado = true;
                    break;
                }
            }
            if (!duplicado) {
                Cliente cliente = new Cliente();
                cliente.setIdCliente(rs.getInt("idCliente"));
                cliente.setNome(rs.getString("nome"));
                cliente.setEndereco(rs.getString("endereco"));
                cliente.setBairro(rs.getString("bairro"));
                cliente.setCidade(rs.getString("cidade"));
                cliente.setEstado(rs.getString("estado"));
                cliente.setEmail(rs.getString("email"));
                cliente.setTelefone(rs.getString("telefone"));
                listaCliente.add(cliente);
                duplicado = false;
            }
        }

        sql = "select * from tb_cliente where endereco LIKE '%" + parametro + "%'";

        preparedStatement = conexao.prepareStatement(sql);
        rs = preparedStatement.executeQuery(sql);

        while (rs.next()) {
            duplicado = false;
             for (int i = 0; i < listaCliente.size(); i++) {
                if (listaCliente.get(i).getIdCliente() == rs.getInt("idCliente")) {
                    duplicado = true;
                    break;
                }
            }
            if (!duplicado) {
                Cliente cliente = new Cliente();
                cliente.setIdCliente(rs.getInt("idCliente"));
                cliente.setNome(rs.getString("nome"));
                cliente.setEndereco(rs.getString("endereco"));
                cliente.setBairro(rs.getString("bairro"));
                cliente.setCidade(rs.getString("cidade"));
                cliente.setEstado(rs.getString("estado"));
                cliente.setEmail(rs.getString("email"));
                cliente.setTelefone(rs.getString("telefone"));
                listaCliente.add(cliente);
                duplicado = false;
            }
        }

        sql = "select * from tb_cliente where email LIKE '%" + parametro + "%'";

        preparedStatement = conexao.prepareStatement(sql);
        rs = preparedStatement.executeQuery(sql);

        while (rs.next()) {
             duplicado = false;
                  for (int i = 0; i < listaCliente.size(); i++) {
                if (listaCliente.get(i).getIdCliente() == rs.getInt("idCliente")) {
                    duplicado = true;
                    break;
                }
            }
            if (!duplicado) {
                Cliente cliente = new Cliente();
                cliente.setIdCliente(rs.getInt("idCliente"));
                cliente.setNome(rs.getString("nome"));
                cliente.setEndereco(rs.getString("endereco"));
                cliente.setBairro(rs.getString("bairro"));
                cliente.setCidade(rs.getString("cidade"));
                cliente.setEstado(rs.getString("estado"));
                cliente.setEmail(rs.getString("email"));
                cliente.setTelefone(rs.getString("telefone"));
                listaCliente.add(cliente);
                duplicado = false;
            }
        }
        
     

        return listaCliente;
    }
    
    public Cliente buscaClientePorId(int id) throws SQLException {
        
        String sql = "select * from tb_cliente where idCliente = " + id ;
        
        PreparedStatement preparedStatement = conexao.prepareStatement(sql);
        ResultSet rs = preparedStatement.executeQuery(sql);

        Cliente cliente = new Cliente();

        while (rs.next()) {
                cliente.setIdCliente(rs.getInt("idCliente"));
                cliente.setNome(rs.getString("nome"));
                cliente.setEndereco(rs.getString("endereco"));
                cliente.setBairro(rs.getString("bairro"));
                cliente.setCidade(rs.getString("cidade"));
                cliente.setEstado(rs.getString("estado"));
                cliente.setEmail(rs.getString("email"));
                cliente.setTelefone(rs.getString("telefone"));
        }

        return cliente;
    }
    
    public void excluiClientePorId(int id) {
        String sql = "delete from tb_cliente where idCliente = " + id ;
        
        try {
            PreparedStatement stmt = this.conexao.prepareStatement(sql);
            stmt.execute();
            stmt.close();
        } catch (SQLException ex) {
            Logger.getLogger(UsuarioDao.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

}
